<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Flow: flow::net_flow::Peer_socket_send_stats_accumulator Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">Flow<span id="projectnumber">&#160;2.0.0</span>
   </div>
   <div id="projectbrief">Flow project: Full implementation reference.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespaceflow.html">flow</a></li><li class="navelem"><a class="el" href="namespaceflow_1_1net__flow.html">net_flow</a></li><li class="navelem"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html">Peer_socket_send_stats_accumulator</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator-members.html">List of all members</a>  </div>
  <div class="headertitle"><div class="title">flow::net_flow::Peer_socket_send_stats_accumulator Class Reference</div></div>
</div><!--header-->
<div class="contents">

<p>A class that keeps a <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html" title="A data store that keeps stats about the outgoing direction of a Peer_socket connection to another Flo...">Peer_socket_send_stats</a> data store, includes methods to conveniently accumulate data in it, and provides output to <code>ostream</code>.  
 <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#details">More...</a></p>

<p><code>#include &lt;<a class="el" href="socket__stats_8hpp_source.html">socket_stats.hpp</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for flow::net_flow::Peer_socket_send_stats_accumulator:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator__inherit__graph.svg" width="296" height="131"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for flow::net_flow::Peer_socket_send_stats_accumulator:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator__coll__graph.svg" width="979" height="554"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a8ec3cdbb6d88ef03a65db5ee14337f12"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html">Peer_socket_send_stats</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a8ec3cdbb6d88ef03a65db5ee14337f12">stats</a> () const</td></tr>
<tr class="memdesc:a8ec3cdbb6d88ef03a65db5ee14337f12"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns reference to non-modifiable current set of accumulated stats.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a8ec3cdbb6d88ef03a65db5ee14337f12">More...</a><br /></td></tr>
<tr class="separator:a8ec3cdbb6d88ef03a65db5ee14337f12"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abedf0a6c3119aa348c76c1cc922630cf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#abedf0a6c3119aa348c76c1cc922630cf">data_sent</a> (size_t data, <a class="el" href="classbool.html">bool</a> rexmission)</td></tr>
<tr class="memdesc:abedf0a6c3119aa348c76c1cc922630cf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Indicates a DATA packet was sent.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#abedf0a6c3119aa348c76c1cc922630cf">More...</a><br /></td></tr>
<tr class="separator:abedf0a6c3119aa348c76c1cc922630cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7a5561e3da9a1a9c0861c97da050d1c6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a7a5561e3da9a1a9c0861c97da050d1c6">dropped_data</a> (size_t data, size_t count)</td></tr>
<tr class="memdesc:a7a5561e3da9a1a9c0861c97da050d1c6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Indicates that 1 or more packets have been converted from In-flight to Dropped.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a7a5561e3da9a1a9c0861c97da050d1c6">More...</a><br /></td></tr>
<tr class="separator:a7a5561e3da9a1a9c0861c97da050d1c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a112b87cded6191f38d9195da16df4222"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a112b87cded6191f38d9195da16df4222">received_low_lvl_ack_packet</a> (<a class="el" href="classbool.html">bool</a> rcv_wnd_update_only)</td></tr>
<tr class="memdesc:a112b87cded6191f38d9195da16df4222"><td class="mdescLeft">&#160;</td><td class="mdescRight">Indicates an ACK packet on this socket was received.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a112b87cded6191f38d9195da16df4222">More...</a><br /></td></tr>
<tr class="separator:a112b87cded6191f38d9195da16df4222"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4daa22f531e892e89fb33d8579543ec5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a4daa22f531e892e89fb33d8579543ec5">updated_rcv_wnd</a> (<a class="el" href="classbool.html">bool</a> wnd_exhausted)</td></tr>
<tr class="memdesc:a4daa22f531e892e89fb33d8579543ec5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Indicates an ACK packet has advertised a rcv_wnd and whether this rcv_wnd would allow one to send one full-sized packet assuming no other barriers (availability of data to send, congestion control).  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a4daa22f531e892e89fb33d8579543ec5">More...</a><br /></td></tr>
<tr class="separator:a4daa22f531e892e89fb33d8579543ec5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4efc28446c03a737174db2dd8d252015"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a4efc28446c03a737174db2dd8d252015">received_ack</a> ()</td></tr>
<tr class="memdesc:a4efc28446c03a737174db2dd8d252015"><td class="mdescLeft">&#160;</td><td class="mdescRight">Indicates one individual acknowledgment (of a DATA packet) inside an ACK has been received.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a4efc28446c03a737174db2dd8d252015">More...</a><br /></td></tr>
<tr class="separator:a4efc28446c03a737174db2dd8d252015"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac3348dc1e0bfb5377addd00eadd28ed9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#ac3348dc1e0bfb5377addd00eadd28ed9">good_ack</a> (size_t data)</td></tr>
<tr class="memdesc:ac3348dc1e0bfb5377addd00eadd28ed9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Indicates <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a4efc28446c03a737174db2dd8d252015" title="Indicates one individual acknowledgment (of a DATA packet) inside an ACK has been received.">received_ack()</a>, and the arrived acknowledgment properly acknowledged a DATA packet, converting it from In-flight to Acknowledged.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#ac3348dc1e0bfb5377addd00eadd28ed9">More...</a><br /></td></tr>
<tr class="separator:ac3348dc1e0bfb5377addd00eadd28ed9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab0024fc003079f5e5ad0b3d43b896227"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#ab0024fc003079f5e5ad0b3d43b896227">late_or_dupe_ack</a> ()</td></tr>
<tr class="memdesc:ab0024fc003079f5e5ad0b3d43b896227"><td class="mdescLeft">&#160;</td><td class="mdescRight">Indicates <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a4efc28446c03a737174db2dd8d252015" title="Indicates one individual acknowledgment (of a DATA packet) inside an ACK has been received.">received_ack()</a>, but the arrived acknowledgment is for a packet that has either already been convered from In-flight to Acknowledged or (more likely) already been converted from In-flight to Dropped.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#ab0024fc003079f5e5ad0b3d43b896227">More...</a><br /></td></tr>
<tr class="separator:ab0024fc003079f5e5ad0b3d43b896227"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a496a5ff2273e9e9748accbc2b7311bfa"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a496a5ff2273e9e9748accbc2b7311bfa">error_ack</a> ()</td></tr>
<tr class="memdesc:a496a5ff2273e9e9748accbc2b7311bfa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Indicates <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a4efc28446c03a737174db2dd8d252015" title="Indicates one individual acknowledgment (of a DATA packet) inside an ACK has been received.">received_ack()</a>, but there is some error about the sequence number so that it is not acceptable, and the connection did/will close as a result.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a496a5ff2273e9e9748accbc2b7311bfa">More...</a><br /></td></tr>
<tr class="separator:a496a5ff2273e9e9748accbc2b7311bfa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a71b1e4e4384319db571edfbd825bd6ea"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a71b1e4e4384319db571edfbd825bd6ea">loss_event</a> ()</td></tr>
<tr class="memdesc:a71b1e4e4384319db571edfbd825bd6ea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Indicates a new loss event (not counting Drop Timeouts) has been reported to congestion control (<a class="el" href="classflow_1_1net__flow_1_1Congestion__control__strategy.html#a238eb8f69e309e354d3fbc1c3017f614" title="Informs the congestion control strategy that 1 or more previously sent packets whose status was In-fl...">Congestion_control_strategy::on_loss_event()</a>).  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a71b1e4e4384319db571edfbd825bd6ea">More...</a><br /></td></tr>
<tr class="separator:a71b1e4e4384319db571edfbd825bd6ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1480be7f2e20d10fcbd88a14aa925127"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a1480be7f2e20d10fcbd88a14aa925127">drop_timeout</a> ()</td></tr>
<tr class="memdesc:a1480be7f2e20d10fcbd88a14aa925127"><td class="mdescLeft">&#160;</td><td class="mdescRight">Indicates a Drop Timer fired once.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a1480be7f2e20d10fcbd88a14aa925127">More...</a><br /></td></tr>
<tr class="separator:a1480be7f2e20d10fcbd88a14aa925127"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a143a4152d709b9ccc500f73b569a173e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a143a4152d709b9ccc500f73b569a173e">idle_timeout</a> ()</td></tr>
<tr class="memdesc:a143a4152d709b9ccc500f73b569a173e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Indicates an idle timeout (in the send direction) has been detected and indicated to congestion control module.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a143a4152d709b9ccc500f73b569a173e">More...</a><br /></td></tr>
<tr class="separator:a143a4152d709b9ccc500f73b569a173e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4a2d4fed1d71d58a34dc3f596c772e03"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a4a2d4fed1d71d58a34dc3f596c772e03">buffer_fed</a> (size_t size)</td></tr>
<tr class="memdesc:a4a2d4fed1d71d58a34dc3f596c772e03"><td class="mdescLeft">&#160;</td><td class="mdescRight">Indicates the Send buffer was enqueued with data from a user <code>send*()</code> call (so its <code>data_size()</code> increased).  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a4a2d4fed1d71d58a34dc3f596c772e03">More...</a><br /></td></tr>
<tr class="separator:a4a2d4fed1d71d58a34dc3f596c772e03"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8dca8497873f98d8318b3fdd2c034c14"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a8dca8497873f98d8318b3fdd2c034c14">low_lvl_packet_xfer_requested</a> (const std::type_info &amp;type)</td></tr>
<tr class="memdesc:a8dca8497873f98d8318b3fdd2c034c14"><td class="mdescLeft">&#160;</td><td class="mdescRight">Indicates a packet was given to the sending module to send, possibly subject to pacing.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a8dca8497873f98d8318b3fdd2c034c14">More...</a><br /></td></tr>
<tr class="separator:a8dca8497873f98d8318b3fdd2c034c14"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a664e608952d250f7f5d41bdf04abf68b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a664e608952d250f7f5d41bdf04abf68b">low_lvl_packet_xfer_called</a> (const std::type_info &amp;type, <a class="el" href="classbool.html">bool</a> delayed_by_pacing, size_t size)</td></tr>
<tr class="memdesc:a664e608952d250f7f5d41bdf04abf68b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Indicates <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a8dca8497873f98d8318b3fdd2c034c14" title="Indicates a packet was given to the sending module to send, possibly subject to pacing.">low_lvl_packet_xfer_requested()</a>, and that packet has now been given to OS UDP stack to actually send.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a664e608952d250f7f5d41bdf04abf68b">More...</a><br /></td></tr>
<tr class="separator:a664e608952d250f7f5d41bdf04abf68b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a186fb12bc19cf00e50b80116f782ff94"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a186fb12bc19cf00e50b80116f782ff94">low_lvl_packet_xfer_completed</a> (const std::type_info &amp;type, size_t size_expected=std::numeric_limits&lt; size_t &gt;::max(), size_t size_xferred=0)</td></tr>
<tr class="memdesc:a186fb12bc19cf00e50b80116f782ff94"><td class="mdescLeft">&#160;</td><td class="mdescRight">Indicates <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a664e608952d250f7f5d41bdf04abf68b" title="Indicates low_lvl_packet_xfer_requested(), and that packet has now been given to OS UDP stack to actu...">low_lvl_packet_xfer_called()</a>, and that send operation has now reported its outcome by calling handler (or synchronously returning the result).  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a186fb12bc19cf00e50b80116f782ff94">More...</a><br /></td></tr>
<tr class="separator:a186fb12bc19cf00e50b80116f782ff94"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="inherited" name="inherited"></a>
Additional Inherited Members</h2></td></tr>
<tr class="inherit_header pub_methods_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classflow_1_1net__flow_1_1Peer__socket__send__stats')"><img src="closed.png" alt="-"/>&#160;Private Member Functions inherited from <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html">flow::net_flow::Peer_socket_send_stats</a></td></tr>
<tr class="memitem:a468d36bda026bd4eb3aa8cec7cd3e82b inherit pub_methods_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a468d36bda026bd4eb3aa8cec7cd3e82b">Peer_socket_send_stats</a> ()</td></tr>
<tr class="memdesc:a468d36bda026bd4eb3aa8cec7cd3e82b inherit pub_methods_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs object by initializing stats to their initial values.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a468d36bda026bd4eb3aa8cec7cd3e82b">More...</a><br /></td></tr>
<tr class="separator:a468d36bda026bd4eb3aa8cec7cd3e82b inherit pub_methods_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a80f22a53b5ba0cb86469e5522ec30305 inherit pub_methods_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a80f22a53b5ba0cb86469e5522ec30305">output</a> (std::ostream *os) const</td></tr>
<tr class="memdesc:a80f22a53b5ba0cb86469e5522ec30305 inherit pub_methods_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Outputs the current stats, across multiple lines but not ending with a newline, into the given output stream.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a80f22a53b5ba0cb86469e5522ec30305">More...</a><br /></td></tr>
<tr class="separator:a80f22a53b5ba0cb86469e5522ec30305 inherit pub_methods_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td colspan="2" onclick="javascript:toggleInherit('pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats')"><img src="closed.png" alt="-"/>&#160;Private Attributes inherited from <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html">flow::net_flow::Peer_socket_send_stats</a></td></tr>
<tr class="memitem:a13bf4f61554410f5dcc8928d64212e04 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceflow.html#a9d9cc2eeb10d398cff5591d446b763b8">Fine_time_pt</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a13bf4f61554410f5dcc8928d64212e04">m_init_time</a></td></tr>
<tr class="memdesc:a13bf4f61554410f5dcc8928d64212e04 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">The time this object was created; should be about equal to when the socket was created.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a13bf4f61554410f5dcc8928d64212e04">More...</a><br /></td></tr>
<tr class="separator:a13bf4f61554410f5dcc8928d64212e04 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a702a7e3fa092414f80190a783f478aeb inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a702a7e3fa092414f80190a783f478aeb">m_sent_data_size</a></td></tr>
<tr class="memdesc:a702a7e3fa092414f80190a783f478aeb inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Total bytes sent in DATA packets.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a702a7e3fa092414f80190a783f478aeb">More...</a><br /></td></tr>
<tr class="separator:a702a7e3fa092414f80190a783f478aeb inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a72a061170ab84cd19aabb1c40238d65f inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a72a061170ab84cd19aabb1c40238d65f">m_sent_data_count</a></td></tr>
<tr class="memdesc:a72a061170ab84cd19aabb1c40238d65f inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of packets sent in DATA packets.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a72a061170ab84cd19aabb1c40238d65f">More...</a><br /></td></tr>
<tr class="separator:a72a061170ab84cd19aabb1c40238d65f inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3e00dce3ed58630d79a8cdaa7b76c8ee inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a3e00dce3ed58630d79a8cdaa7b76c8ee">m_sent_rexmitted_data_size</a></td></tr>
<tr class="memdesc:a3e00dce3ed58630d79a8cdaa7b76c8ee inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Of <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a702a7e3fa092414f80190a783f478aeb" title="Total bytes sent in DATA packets.">m_sent_data_size</a>, the data that were retransmitted (as opposed to original) data.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a3e00dce3ed58630d79a8cdaa7b76c8ee">More...</a><br /></td></tr>
<tr class="separator:a3e00dce3ed58630d79a8cdaa7b76c8ee inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0bde533fd087669e6dc356e45be975b4 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a0bde533fd087669e6dc356e45be975b4">m_sent_rexmitted_data_count</a></td></tr>
<tr class="memdesc:a0bde533fd087669e6dc356e45be975b4 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Of <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a72a061170ab84cd19aabb1c40238d65f" title="Number of packets sent in DATA packets.">m_sent_data_count</a>, the data that were retransmitted (as opposed to original) data.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a0bde533fd087669e6dc356e45be975b4">More...</a><br /></td></tr>
<tr class="separator:a0bde533fd087669e6dc356e45be975b4 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acca7ee65f331c8d6b1ed9c1c64f941c6 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#acca7ee65f331c8d6b1ed9c1c64f941c6">m_received_low_lvl_ack_count</a></td></tr>
<tr class="memdesc:acca7ee65f331c8d6b1ed9c1c64f941c6 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of low-level ACK packets received.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#acca7ee65f331c8d6b1ed9c1c64f941c6">More...</a><br /></td></tr>
<tr class="separator:acca7ee65f331c8d6b1ed9c1c64f941c6 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab16d86a43937ff1a082c8eb9710ae24b inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#ab16d86a43937ff1a082c8eb9710ae24b">m_received_low_lvl_rcv_wnd_only_ack_count</a></td></tr>
<tr class="memdesc:ab16d86a43937ff1a082c8eb9710ae24b inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Of <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#acca7ee65f331c8d6b1ed9c1c64f941c6" title="Number of low-level ACK packets received.">m_received_low_lvl_ack_count</a>, the packets that contained no individual acknowledgments but sent only to advertise rcv_wnd.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#ab16d86a43937ff1a082c8eb9710ae24b">More...</a><br /></td></tr>
<tr class="separator:ab16d86a43937ff1a082c8eb9710ae24b inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a49fd72447e2eda5168855963f6f55fdf inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a49fd72447e2eda5168855963f6f55fdf">m_received_ack_count</a></td></tr>
<tr class="memdesc:a49fd72447e2eda5168855963f6f55fdf inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Individual acknowledgments inside low-level ACK packets that have been received (not necessarily all valid).  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a49fd72447e2eda5168855963f6f55fdf">More...</a><br /></td></tr>
<tr class="separator:a49fd72447e2eda5168855963f6f55fdf inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7c23d15ff0f3350cca96e38322f3cbf0 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classbool.html">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a7c23d15ff0f3350cca96e38322f3cbf0">m_rcv_wnd_exhausted</a></td></tr>
<tr class="memdesc:a7c23d15ff0f3350cca96e38322f3cbf0 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Whether the last rcv_wnd update from other side indicated window size &lt; max-block-size bytes. <code>false</code> initially.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a7c23d15ff0f3350cca96e38322f3cbf0">More...</a><br /></td></tr>
<tr class="separator:a7c23d15ff0f3350cca96e38322f3cbf0 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af3976b80514468082ca36eb00857a5bb inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#af3976b80514468082ca36eb00857a5bb">m_remote_rcv_wnd_exhaustion_events</a></td></tr>
<tr class="memdesc:af3976b80514468082ca36eb00857a5bb inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of times <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a7c23d15ff0f3350cca96e38322f3cbf0" title="Whether the last rcv_wnd update from other side indicated window size &lt; max-block-size bytes....">m_rcv_wnd_exhausted</a> changed from <code>false</code>.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#af3976b80514468082ca36eb00857a5bb">More...</a><br /></td></tr>
<tr class="separator:af3976b80514468082ca36eb00857a5bb inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a146759e1b8603f000b85e90ce02f7327 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a146759e1b8603f000b85e90ce02f7327">m_remote_rcv_wnd_recovery_events</a></td></tr>
<tr class="memdesc:a146759e1b8603f000b85e90ce02f7327 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of times <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a7c23d15ff0f3350cca96e38322f3cbf0" title="Whether the last rcv_wnd update from other side indicated window size &lt; max-block-size bytes....">m_rcv_wnd_exhausted</a> changed from <code>true</code> (not counting it being initially set to <code>false</code>).  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a146759e1b8603f000b85e90ce02f7327">More...</a><br /></td></tr>
<tr class="separator:a146759e1b8603f000b85e90ce02f7327 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac64296f2cd3f8a916e88022369dde97a inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#ac64296f2cd3f8a916e88022369dde97a">m_good_ack_data_size</a></td></tr>
<tr class="memdesc:ac64296f2cd3f8a916e88022369dde97a inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Of the individual acknowledgments covered by <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a49fd72447e2eda5168855963f6f55fdf" title="Individual acknowledgments inside low-level ACK packets that have been received (not necessarily all ...">m_received_ack_count</a>, the total bytes in the DATA packets that were properly acknowledged and converted from In-flight to Acknowledged status.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#ac64296f2cd3f8a916e88022369dde97a">More...</a><br /></td></tr>
<tr class="separator:ac64296f2cd3f8a916e88022369dde97a inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7a1d14037ba5607b7aac6e5f0736ea97 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a7a1d14037ba5607b7aac6e5f0736ea97">m_good_ack_count</a></td></tr>
<tr class="memdesc:a7a1d14037ba5607b7aac6e5f0736ea97 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Of <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a49fd72447e2eda5168855963f6f55fdf" title="Individual acknowledgments inside low-level ACK packets that have been received (not necessarily all ...">m_received_ack_count</a>, those packets that were properly acknowledged and converted from In-flight to Acknowledged status.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a7a1d14037ba5607b7aac6e5f0736ea97">More...</a><br /></td></tr>
<tr class="separator:a7a1d14037ba5607b7aac6e5f0736ea97 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5969e758bc5632d7ed0def916faacd57 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a5969e758bc5632d7ed0def916faacd57">m_late_or_dupe_ack_count</a></td></tr>
<tr class="memdesc:a5969e758bc5632d7ed0def916faacd57 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Of <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a49fd72447e2eda5168855963f6f55fdf" title="Individual acknowledgments inside low-level ACK packets that have been received (not necessarily all ...">m_received_ack_count</a>, those packets that had either already been convered from In-flight to Acknowledged or (more likely) already been converted from In-flight to Dropped.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a5969e758bc5632d7ed0def916faacd57">More...</a><br /></td></tr>
<tr class="separator:a5969e758bc5632d7ed0def916faacd57 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa12a250e3368070b8ceff316e7d6f2b6 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#aa12a250e3368070b8ceff316e7d6f2b6">m_error_acks_data_count</a></td></tr>
<tr class="memdesc:aa12a250e3368070b8ceff316e7d6f2b6 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Of <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a49fd72447e2eda5168855963f6f55fdf" title="Individual acknowledgments inside low-level ACK packets that have been received (not necessarily all ...">m_received_ack_count</a>, those acknowledgments that contained some error about the sequence numbers so that they were not acceptable, and the connection did/will close as a result.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#aa12a250e3368070b8ceff316e7d6f2b6">More...</a><br /></td></tr>
<tr class="separator:aa12a250e3368070b8ceff316e7d6f2b6 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a93be5eea9037929e0b08890278f5a522 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a93be5eea9037929e0b08890278f5a522">m_dropped_data_size</a></td></tr>
<tr class="memdesc:a93be5eea9037929e0b08890278f5a522 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Total bytes in sent DATA packets that are considered permanently dropped (i.e., whose status has changed from In-flight to Dropped).  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a93be5eea9037929e0b08890278f5a522">More...</a><br /></td></tr>
<tr class="separator:a93be5eea9037929e0b08890278f5a522 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab079152574c6455110bdce7d9f157d80 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#ab079152574c6455110bdce7d9f157d80">m_dropped_data_count</a></td></tr>
<tr class="memdesc:ab079152574c6455110bdce7d9f157d80 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of sent DATA packets that are considered permanently dropped (i.e., whose status has changed from In-flight to Dropped).  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#ab079152574c6455110bdce7d9f157d80">More...</a><br /></td></tr>
<tr class="separator:ab079152574c6455110bdce7d9f157d80 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6ef23ec6d995a8cb71dc9cc5d2c24c1d inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a6ef23ec6d995a8cb71dc9cc5d2c24c1d">m_loss_events</a></td></tr>
<tr class="memdesc:a6ef23ec6d995a8cb71dc9cc5d2c24c1d inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of loss events so far (not counting Drop Timeouts) that have been reported to congestion control module.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a6ef23ec6d995a8cb71dc9cc5d2c24c1d">More...</a><br /></td></tr>
<tr class="separator:a6ef23ec6d995a8cb71dc9cc5d2c24c1d inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6851332a773bdc55154fe7e4233db4fd inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a6851332a773bdc55154fe7e4233db4fd">m_idle_timeouts</a></td></tr>
<tr class="memdesc:a6851332a773bdc55154fe7e4233db4fd inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of idle timeouts (in the send direction) so far that have been detected and indicated to congestion control module.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a6851332a773bdc55154fe7e4233db4fd">More...</a><br /></td></tr>
<tr class="separator:a6851332a773bdc55154fe7e4233db4fd inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5f3054faf100116ec0db9cee0d6bdbe8 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a5f3054faf100116ec0db9cee0d6bdbe8">m_drop_timeouts</a></td></tr>
<tr class="memdesc:a5f3054faf100116ec0db9cee0d6bdbe8 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of times Drop Timer has fired so far.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a5f3054faf100116ec0db9cee0d6bdbe8">More...</a><br /></td></tr>
<tr class="separator:a5f3054faf100116ec0db9cee0d6bdbe8 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a54ab43fb396a87593fd194a3f7837699 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a54ab43fb396a87593fd194a3f7837699">m_max_buf_data_size</a></td></tr>
<tr class="memdesc:a54ab43fb396a87593fd194a3f7837699 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum number of bytes in the Send buffer so far.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a54ab43fb396a87593fd194a3f7837699">More...</a><br /></td></tr>
<tr class="separator:a54ab43fb396a87593fd194a3f7837699 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaca7b45515144a6bb5e1b3c978251591 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">std::map&lt; std::type_index, uint64_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#aaca7b45515144a6bb5e1b3c978251591">m_low_lvl_packet_xfer_requested_count_by_type</a></td></tr>
<tr class="memdesc:aaca7b45515144a6bb5e1b3c978251591 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Total count of low-level packets that were given to the sending module to be sent, subject to pacing if applicable, split up by packet type similarly to <a class="el" href="structflow_1_1net__flow_1_1Peer__socket__receive__stats.html#afced8fb805507e2ac53bcb6b55441c0d" title="Total size in serialized form of low-level packets received targeted at this socket,...">Peer_socket_receive_stats::m_low_lvl_packet_size_by_type</a>.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#aaca7b45515144a6bb5e1b3c978251591">More...</a><br /></td></tr>
<tr class="separator:aaca7b45515144a6bb5e1b3c978251591 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6161ae89e02d9f9f768b50aaba0b5f3d inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">std::map&lt; std::type_index, boost::array&lt; uint64_t, 2 &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a6161ae89e02d9f9f768b50aaba0b5f3d">m_low_lvl_packet_xfer_called_size_by_type</a></td></tr>
<tr class="memdesc:a6161ae89e02d9f9f768b50aaba0b5f3d inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Total size in serialized form of low-level packets that were given to OS in a send call, from this socket, split up by packet type similarly to <a class="el" href="structflow_1_1net__flow_1_1Peer__socket__receive__stats.html#afced8fb805507e2ac53bcb6b55441c0d" title="Total size in serialized form of low-level packets received targeted at this socket,...">Peer_socket_receive_stats::m_low_lvl_packet_size_by_type</a>.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a6161ae89e02d9f9f768b50aaba0b5f3d">More...</a><br /></td></tr>
<tr class="separator:a6161ae89e02d9f9f768b50aaba0b5f3d inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad05c38422adb3ef6c98e6ec37c539a09 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">std::map&lt; std::type_index, boost::array&lt; uint64_t, 2 &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#ad05c38422adb3ef6c98e6ec37c539a09">m_low_lvl_packet_xfer_called_count_by_type</a></td></tr>
<tr class="memdesc:ad05c38422adb3ef6c98e6ec37c539a09 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Count of low-level packets that were given to OS in a send call, from this socket, split up by packet type similarly to <a class="el" href="structflow_1_1net__flow_1_1Peer__socket__receive__stats.html#afced8fb805507e2ac53bcb6b55441c0d" title="Total size in serialized form of low-level packets received targeted at this socket,...">Peer_socket_receive_stats::m_low_lvl_packet_size_by_type</a>.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#ad05c38422adb3ef6c98e6ec37c539a09">More...</a><br /></td></tr>
<tr class="separator:ad05c38422adb3ef6c98e6ec37c539a09 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae0898d89892cfeb1e20cef22e45060e2 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">std::map&lt; std::type_index, std::map&lt; <a class="el" href="namespaceflow_1_1net__flow.html#aaeebb1db2f4bb19f78cada66784d91d5">Xfer_op_result</a>, uint64_t &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#ae0898d89892cfeb1e20cef22e45060e2">m_low_lvl_packet_xfer_completed_size_by_type_and_result</a></td></tr>
<tr class="memdesc:ae0898d89892cfeb1e20cef22e45060e2 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Of <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a6161ae89e02d9f9f768b50aaba0b5f3d" title="Total size in serialized form of low-level packets that were given to OS in a send call,...">m_low_lvl_packet_xfer_called_size_by_type</a>, the data for which the send completion handler executed, split up further by the transfer result reported to the handler.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#ae0898d89892cfeb1e20cef22e45060e2">More...</a><br /></td></tr>
<tr class="separator:ae0898d89892cfeb1e20cef22e45060e2 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a79009d09a57f3baf9fa6905b5635d0f9 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">std::map&lt; std::type_index, std::map&lt; <a class="el" href="namespaceflow_1_1net__flow.html#aaeebb1db2f4bb19f78cada66784d91d5">Xfer_op_result</a>, uint64_t &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a79009d09a57f3baf9fa6905b5635d0f9">m_low_lvl_packet_xfer_completed_count_by_type_and_result</a></td></tr>
<tr class="memdesc:a79009d09a57f3baf9fa6905b5635d0f9 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Of <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#ad05c38422adb3ef6c98e6ec37c539a09" title="Count of low-level packets that were given to OS in a send call, from this socket,...">m_low_lvl_packet_xfer_called_count_by_type</a>, the data for which the send completion handler executed, split up further by the transfer result reported to the handler.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a79009d09a57f3baf9fa6905b5635d0f9">More...</a><br /></td></tr>
<tr class="separator:a79009d09a57f3baf9fa6905b5635d0f9 inherit pub_attribs_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header related_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td colspan="2" onclick="javascript:toggleInherit('related_classflow_1_1net__flow_1_1Peer__socket__send__stats')"><img src="closed.png" alt="-"/>&#160;Related Functions inherited from <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html">flow::net_flow::Peer_socket_send_stats</a></td></tr>
<tr class="memitem:a98357cf7d8e29ec9dd34bd11ab382108 inherit related_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a98357cf7d8e29ec9dd34bd11ab382108">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html">Peer_socket_send_stats</a> &amp;stats)</td></tr>
<tr class="memdesc:a98357cf7d8e29ec9dd34bd11ab382108 inherit related_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints string representation of the stats in the given stats object to the standard <code>ostream</code> and returns the latter.  <a href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html#a98357cf7d8e29ec9dd34bd11ab382108">More...</a><br /></td></tr>
<tr class="separator:a98357cf7d8e29ec9dd34bd11ab382108 inherit related_classflow_1_1net__flow_1_1Peer__socket__send__stats"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >A class that keeps a <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html" title="A data store that keeps stats about the outgoing direction of a Peer_socket connection to another Flo...">Peer_socket_send_stats</a> data store, includes methods to conveniently accumulate data in it, and provides output to <code>ostream</code>. </p>
<p >All other comments in <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__receive__stats__accumulator.html" title="A class that keeps a Peer_socket_receive_stats data store, includes methods to conveniently accumulat...">Peer_socket_receive_stats_accumulator</a> doc header apply equally to this class.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classflow_1_1net__flow_1_1Peer__socket__receive__stats__accumulator.html" title="A class that keeps a Peer_socket_receive_stats data store, includes methods to conveniently accumulat...">Peer_socket_receive_stats_accumulator</a> </dd>
<dd>
<a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html" title="A data store that keeps stats about the outgoing direction of a Peer_socket connection to another Flo...">Peer_socket_send_stats</a> </dd></dl>

<p class="definition">Definition at line <a class="el" href="socket__stats_8hpp_source.html#l00268">268</a> of file <a class="el" href="socket__stats_8hpp_source.html">socket_stats.hpp</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a4a2d4fed1d71d58a34dc3f596c772e03" name="a4a2d4fed1d71d58a34dc3f596c772e03"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4a2d4fed1d71d58a34dc3f596c772e03">&#9670;&nbsp;</a></span>buffer_fed()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void flow::net_flow::Peer_socket_send_stats_accumulator::buffer_fed </td>
          <td>(</td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>size</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Indicates the Send buffer was enqueued with data from a user <code>send*()</code> call (so its <code>data_size()</code> increased). </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">size</td><td>The # of bytes in the buffer after the enqueueing. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="socket__stats_8cpp_source.html#l00243">243</a> of file <a class="el" href="socket__stats_8cpp_source.html">socket_stats.cpp</a>.</p>

<p class="reference">References <a class="el" href="info_8hpp_source.html#l00397">flow::net_flow::Peer_socket_send_stats::m_max_buf_data_size</a>.</p>

</div>
</div>
<a id="abedf0a6c3119aa348c76c1cc922630cf" name="abedf0a6c3119aa348c76c1cc922630cf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abedf0a6c3119aa348c76c1cc922630cf">&#9670;&nbsp;</a></span>data_sent()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void flow::net_flow::Peer_socket_send_stats_accumulator::data_sent </td>
          <td>(</td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classbool.html">bool</a>&#160;</td>
          <td class="paramname"><em>rexmission</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Indicates a DATA packet was sent. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">data</td><td>User data size. </td></tr>
    <tr><td class="paramname">rexmission</td><td><code>true</code> if it is a retransmission (<code>rexmit_id &gt; 0</code>), <code>false</code> otherwise. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="socket__stats_8cpp_source.html#l00169">169</a> of file <a class="el" href="socket__stats_8cpp_source.html">socket_stats.cpp</a>.</p>

<p class="reference">References <a class="el" href="info_8hpp_source.html#l00318">flow::net_flow::Peer_socket_send_stats::m_sent_data_count</a>, <a class="el" href="info_8hpp_source.html#l00316">flow::net_flow::Peer_socket_send_stats::m_sent_data_size</a>, <a class="el" href="info_8hpp_source.html#l00323">flow::net_flow::Peer_socket_send_stats::m_sent_rexmitted_data_count</a>, and <a class="el" href="info_8hpp_source.html#l00321">flow::net_flow::Peer_socket_send_stats::m_sent_rexmitted_data_size</a>.</p>

</div>
</div>
<a id="a1480be7f2e20d10fcbd88a14aa925127" name="a1480be7f2e20d10fcbd88a14aa925127"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1480be7f2e20d10fcbd88a14aa925127">&#9670;&nbsp;</a></span>drop_timeout()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void flow::net_flow::Peer_socket_send_stats_accumulator::drop_timeout </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Indicates a Drop Timer fired once. </p>

<p class="definition">Definition at line <a class="el" href="socket__stats_8cpp_source.html#l00233">233</a> of file <a class="el" href="socket__stats_8cpp_source.html">socket_stats.cpp</a>.</p>

<p class="reference">References <a class="el" href="info_8hpp_source.html#l00394">flow::net_flow::Peer_socket_send_stats::m_drop_timeouts</a>.</p>

</div>
</div>
<a id="a7a5561e3da9a1a9c0861c97da050d1c6" name="a7a5561e3da9a1a9c0861c97da050d1c6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7a5561e3da9a1a9c0861c97da050d1c6">&#9670;&nbsp;</a></span>dropped_data()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void flow::net_flow::Peer_socket_send_stats_accumulator::dropped_data </td>
          <td>(</td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>count</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Indicates that 1 or more packets have been converted from In-flight to Dropped. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">data</td><td>User data size. </td></tr>
    <tr><td class="paramname">count</td><td>Packet count. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="socket__stats_8cpp_source.html#l00180">180</a> of file <a class="el" href="socket__stats_8cpp_source.html">socket_stats.cpp</a>.</p>

<p class="reference">References <a class="el" href="info_8hpp_source.html#l00378">flow::net_flow::Peer_socket_send_stats::m_dropped_data_count</a>, and <a class="el" href="info_8hpp_source.html#l00373">flow::net_flow::Peer_socket_send_stats::m_dropped_data_size</a>.</p>

</div>
</div>
<a id="a496a5ff2273e9e9748accbc2b7311bfa" name="a496a5ff2273e9e9748accbc2b7311bfa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a496a5ff2273e9e9748accbc2b7311bfa">&#9670;&nbsp;</a></span>error_ack()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void flow::net_flow::Peer_socket_send_stats_accumulator::error_ack </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Indicates <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a4efc28446c03a737174db2dd8d252015" title="Indicates one individual acknowledgment (of a DATA packet) inside an ACK has been received.">received_ack()</a>, but there is some error about the sequence number so that it is not acceptable, and the connection did/will close as a result. </p>

<p class="definition">Definition at line <a class="el" href="socket__stats_8cpp_source.html#l00223">223</a> of file <a class="el" href="socket__stats_8cpp_source.html">socket_stats.cpp</a>.</p>

<p class="reference">References <a class="el" href="info_8hpp_source.html#l00367">flow::net_flow::Peer_socket_send_stats::m_error_acks_data_count</a>.</p>

</div>
</div>
<a id="ac3348dc1e0bfb5377addd00eadd28ed9" name="ac3348dc1e0bfb5377addd00eadd28ed9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac3348dc1e0bfb5377addd00eadd28ed9">&#9670;&nbsp;</a></span>good_ack()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void flow::net_flow::Peer_socket_send_stats_accumulator::good_ack </td>
          <td>(</td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>data</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Indicates <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a4efc28446c03a737174db2dd8d252015" title="Indicates one individual acknowledgment (of a DATA packet) inside an ACK has been received.">received_ack()</a>, and the arrived acknowledgment properly acknowledged a DATA packet, converting it from In-flight to Acknowledged. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">data</td><td>User data size. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="socket__stats_8cpp_source.html#l00212">212</a> of file <a class="el" href="socket__stats_8cpp_source.html">socket_stats.cpp</a>.</p>

<p class="reference">References <a class="el" href="info_8hpp_source.html#l00355">flow::net_flow::Peer_socket_send_stats::m_good_ack_count</a>, and <a class="el" href="info_8hpp_source.html#l00350">flow::net_flow::Peer_socket_send_stats::m_good_ack_data_size</a>.</p>

</div>
</div>
<a id="a143a4152d709b9ccc500f73b569a173e" name="a143a4152d709b9ccc500f73b569a173e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a143a4152d709b9ccc500f73b569a173e">&#9670;&nbsp;</a></span>idle_timeout()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void flow::net_flow::Peer_socket_send_stats_accumulator::idle_timeout </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Indicates an idle timeout (in the send direction) has been detected and indicated to congestion control module. </p>

<p class="definition">Definition at line <a class="el" href="socket__stats_8cpp_source.html#l00238">238</a> of file <a class="el" href="socket__stats_8cpp_source.html">socket_stats.cpp</a>.</p>

<p class="reference">References <a class="el" href="info_8hpp_source.html#l00391">flow::net_flow::Peer_socket_send_stats::m_idle_timeouts</a>.</p>

</div>
</div>
<a id="ab0024fc003079f5e5ad0b3d43b896227" name="ab0024fc003079f5e5ad0b3d43b896227"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab0024fc003079f5e5ad0b3d43b896227">&#9670;&nbsp;</a></span>late_or_dupe_ack()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void flow::net_flow::Peer_socket_send_stats_accumulator::late_or_dupe_ack </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Indicates <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a4efc28446c03a737174db2dd8d252015" title="Indicates one individual acknowledgment (of a DATA packet) inside an ACK has been received.">received_ack()</a>, but the arrived acknowledgment is for a packet that has either already been convered from In-flight to Acknowledged or (more likely) already been converted from In-flight to Dropped. </p>

<p class="definition">Definition at line <a class="el" href="socket__stats_8cpp_source.html#l00218">218</a> of file <a class="el" href="socket__stats_8cpp_source.html">socket_stats.cpp</a>.</p>

<p class="reference">References <a class="el" href="info_8hpp_source.html#l00361">flow::net_flow::Peer_socket_send_stats::m_late_or_dupe_ack_count</a>.</p>

</div>
</div>
<a id="a71b1e4e4384319db571edfbd825bd6ea" name="a71b1e4e4384319db571edfbd825bd6ea"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a71b1e4e4384319db571edfbd825bd6ea">&#9670;&nbsp;</a></span>loss_event()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void flow::net_flow::Peer_socket_send_stats_accumulator::loss_event </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Indicates a new loss event (not counting Drop Timeouts) has been reported to congestion control (<a class="el" href="classflow_1_1net__flow_1_1Congestion__control__strategy.html#a238eb8f69e309e354d3fbc1c3017f614" title="Informs the congestion control strategy that 1 or more previously sent packets whose status was In-fl...">Congestion_control_strategy::on_loss_event()</a>). </p>
<p >(Note again that multiple individual acknowledgments, and even multiple ACKs, can belong to one loss event and would only be counted once in thise case.) </p>

<p class="definition">Definition at line <a class="el" href="socket__stats_8cpp_source.html#l00228">228</a> of file <a class="el" href="socket__stats_8cpp_source.html">socket_stats.cpp</a>.</p>

<p class="reference">References <a class="el" href="info_8hpp_source.html#l00385">flow::net_flow::Peer_socket_send_stats::m_loss_events</a>.</p>

</div>
</div>
<a id="a664e608952d250f7f5d41bdf04abf68b" name="a664e608952d250f7f5d41bdf04abf68b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a664e608952d250f7f5d41bdf04abf68b">&#9670;&nbsp;</a></span>low_lvl_packet_xfer_called()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void flow::net_flow::Peer_socket_send_stats_accumulator::low_lvl_packet_xfer_called </td>
          <td>(</td>
          <td class="paramtype">const std::type_info &amp;&#160;</td>
          <td class="paramname"><em>type</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classbool.html">bool</a>&#160;</td>
          <td class="paramname"><em>delayed_by_pacing</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>size</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Indicates <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a8dca8497873f98d8318b3fdd2c034c14" title="Indicates a packet was given to the sending module to send, possibly subject to pacing.">low_lvl_packet_xfer_requested()</a>, and that packet has now been given to OS UDP stack to actually send. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">type</td><td>See <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a8dca8497873f98d8318b3fdd2c034c14" title="Indicates a packet was given to the sending module to send, possibly subject to pacing.">low_lvl_packet_xfer_requested()</a>. </td></tr>
    <tr><td class="paramname">delayed_by_pacing</td><td><code>true</code> if and only if there was a pacing-related delay since <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a8dca8497873f98d8318b3fdd2c034c14" title="Indicates a packet was given to the sending module to send, possibly subject to pacing.">low_lvl_packet_xfer_requested()</a> before this call. </td></tr>
    <tr><td class="paramname">size</td><td>Serialized size of the packet being sent. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="socket__stats_8cpp_source.html#l00255">255</a> of file <a class="el" href="socket__stats_8cpp_source.html">socket_stats.cpp</a>.</p>

<p class="reference">References <a class="el" href="info_8hpp_source.html#l00415">flow::net_flow::Peer_socket_send_stats::m_low_lvl_packet_xfer_called_count_by_type</a>, and <a class="el" href="info_8hpp_source.html#l00409">flow::net_flow::Peer_socket_send_stats::m_low_lvl_packet_xfer_called_size_by_type</a>.</p>

</div>
</div>
<a id="a186fb12bc19cf00e50b80116f782ff94" name="a186fb12bc19cf00e50b80116f782ff94"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a186fb12bc19cf00e50b80116f782ff94">&#9670;&nbsp;</a></span>low_lvl_packet_xfer_completed()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void flow::net_flow::Peer_socket_send_stats_accumulator::low_lvl_packet_xfer_completed </td>
          <td>(</td>
          <td class="paramtype">const std::type_info &amp;&#160;</td>
          <td class="paramname"><em>type</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>size_expected</em> = <code>std::numeric_limits&lt;size_t&gt;::max()</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>size_xferred</em> = <code>0</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Indicates <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a664e608952d250f7f5d41bdf04abf68b" title="Indicates low_lvl_packet_xfer_requested(), and that packet has now been given to OS UDP stack to actu...">low_lvl_packet_xfer_called()</a>, and that send operation has now reported its outcome by calling handler (or synchronously returning the result). </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">type</td><td>See <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a664e608952d250f7f5d41bdf04abf68b" title="Indicates low_lvl_packet_xfer_requested(), and that packet has now been given to OS UDP stack to actu...">low_lvl_packet_xfer_called()</a>. </td></tr>
    <tr><td class="paramname">size_expected</td><td>See <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a664e608952d250f7f5d41bdf04abf68b" title="Indicates low_lvl_packet_xfer_requested(), and that packet has now been given to OS UDP stack to actu...">low_lvl_packet_xfer_called()</a>. </td></tr>
    <tr><td class="paramname">size_xferred</td><td>Size reported as actually sent by OS. Use the default value to indicate OS indicated error (no bytes sent). </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="socket__stats_8cpp_source.html#l00266">266</a> of file <a class="el" href="socket__stats_8cpp_source.html">socket_stats.cpp</a>.</p>

<p class="reference">References <a class="el" href="info_8hpp_source.html#l00428">flow::net_flow::Peer_socket_send_stats::m_low_lvl_packet_xfer_completed_count_by_type_and_result</a>, <a class="el" href="info_8hpp_source.html#l00421">flow::net_flow::Peer_socket_send_stats::m_low_lvl_packet_xfer_completed_size_by_type_and_result</a>, <a class="el" href="namespaceflow_1_1net__flow.html#aaeebb1db2f4bb19f78cada66784d91d5aac04e40d3b2f54f1f517d49594eb7849">flow::net_flow::S_ERROR</a>, <a class="el" href="namespaceflow_1_1net__flow.html#aaeebb1db2f4bb19f78cada66784d91d5a168ab5e2776c3fc69c7efa4262ca489b">flow::net_flow::S_FULLY_XFERRED</a>, and <a class="el" href="namespaceflow_1_1net__flow.html#aaeebb1db2f4bb19f78cada66784d91d5a23df894f5468a4b3c7dc593295fe87e2">flow::net_flow::S_PARTIALLY_XFERRED</a>.</p>

</div>
</div>
<a id="a8dca8497873f98d8318b3fdd2c034c14" name="a8dca8497873f98d8318b3fdd2c034c14"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8dca8497873f98d8318b3fdd2c034c14">&#9670;&nbsp;</a></span>low_lvl_packet_xfer_requested()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void flow::net_flow::Peer_socket_send_stats_accumulator::low_lvl_packet_xfer_requested </td>
          <td>(</td>
          <td class="paramtype">const std::type_info &amp;&#160;</td>
          <td class="paramname"><em>type</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Indicates a packet was given to the sending module to send, possibly subject to pacing. </p>
<p >We guess its serialized size is not yet known, because it has not been serialized yet.</p>
<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000076">Todo:</a></b></dt><dd>It may make sense to serialize a packet as early as possible, so that the size is known at the stage of <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats__accumulator.html#a8dca8497873f98d8318b3fdd2c034c14" title="Indicates a packet was given to the sending module to send, possibly subject to pacing.">Peer_socket_send_stats_accumulator::low_lvl_packet_xfer_requested()</a> call. Possibly knowing the serialized size this early can help the pacing module make smarter decisions.</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">type</td><td><code>typeid(p)</code>, where p refers to an instance of a concrete <a class="el" href="structflow_1_1net__flow_1_1Low__lvl__packet.html" title="Internal net_flow struct that encapsulates the Flow-protocol low-level packet structure and serves as...">Low_lvl_packet</a> sub-type. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="socket__stats_8cpp_source.html#l00248">248</a> of file <a class="el" href="socket__stats_8cpp_source.html">socket_stats.cpp</a>.</p>

<p class="reference">References <a class="el" href="info_8hpp_source.html#l00403">flow::net_flow::Peer_socket_send_stats::m_low_lvl_packet_xfer_requested_count_by_type</a>.</p>

</div>
</div>
<a id="a4efc28446c03a737174db2dd8d252015" name="a4efc28446c03a737174db2dd8d252015"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4efc28446c03a737174db2dd8d252015">&#9670;&nbsp;</a></span>received_ack()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void flow::net_flow::Peer_socket_send_stats_accumulator::received_ack </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Indicates one individual acknowledgment (of a DATA packet) inside an ACK has been received. </p>
<p >(This ack is not necessarily valid.) </p>

<p class="definition">Definition at line <a class="el" href="socket__stats_8cpp_source.html#l00195">195</a> of file <a class="el" href="socket__stats_8cpp_source.html">socket_stats.cpp</a>.</p>

<p class="reference">References <a class="el" href="info_8hpp_source.html#l00335">flow::net_flow::Peer_socket_send_stats::m_received_ack_count</a>.</p>

</div>
</div>
<a id="a112b87cded6191f38d9195da16df4222" name="a112b87cded6191f38d9195da16df4222"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a112b87cded6191f38d9195da16df4222">&#9670;&nbsp;</a></span>received_low_lvl_ack_packet()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void flow::net_flow::Peer_socket_send_stats_accumulator::received_low_lvl_ack_packet </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classbool.html">bool</a>&#160;</td>
          <td class="paramname"><em>rcv_wnd_update_only</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Indicates an ACK packet on this socket was received. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">rcv_wnd_update_only</td><td><code>true</code> if and only if the ACK contained no individual acks (rcv_wnd update only). </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="socket__stats_8cpp_source.html#l00186">186</a> of file <a class="el" href="socket__stats_8cpp_source.html">socket_stats.cpp</a>.</p>

<p class="reference">References <a class="el" href="info_8hpp_source.html#l00326">flow::net_flow::Peer_socket_send_stats::m_received_low_lvl_ack_count</a>, and <a class="el" href="info_8hpp_source.html#l00332">flow::net_flow::Peer_socket_send_stats::m_received_low_lvl_rcv_wnd_only_ack_count</a>.</p>

</div>
</div>
<a id="a8ec3cdbb6d88ef03a65db5ee14337f12" name="a8ec3cdbb6d88ef03a65db5ee14337f12"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8ec3cdbb6d88ef03a65db5ee14337f12">&#9670;&nbsp;</a></span>stats()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="classflow_1_1net__flow_1_1Peer__socket__send__stats.html">Peer_socket_send_stats</a> &amp; flow::net_flow::Peer_socket_send_stats_accumulator::stats </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Returns reference to non-modifiable current set of accumulated stats. </p>
<dl class="section return"><dt>Returns</dt><dd>Ditto. </dd></dl>

<p class="definition">Definition at line <a class="el" href="socket__stats_8cpp_source.html#l00283">283</a> of file <a class="el" href="socket__stats_8cpp_source.html">socket_stats.cpp</a>.</p>

</div>
</div>
<a id="a4daa22f531e892e89fb33d8579543ec5" name="a4daa22f531e892e89fb33d8579543ec5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4daa22f531e892e89fb33d8579543ec5">&#9670;&nbsp;</a></span>updated_rcv_wnd()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void flow::net_flow::Peer_socket_send_stats_accumulator::updated_rcv_wnd </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classbool.html">bool</a>&#160;</td>
          <td class="paramname"><em>wnd_exhausted</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Indicates an ACK packet has advertised a rcv_wnd and whether this rcv_wnd would allow one to send one full-sized packet assuming no other barriers (availability of data to send, congestion control). </p>
<p >In other words indicates whether the other side's Receive buffer is about full to the best of our knowledge.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">wnd_exhausted</td><td><code>true</code> if a packet would not be sent due to rcv_wnd; <code>false</code> otherwise. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="socket__stats_8cpp_source.html#l00200">200</a> of file <a class="el" href="socket__stats_8cpp_source.html">socket_stats.cpp</a>.</p>

<p class="reference">References <a class="el" href="info_8hpp_source.html#l00338">flow::net_flow::Peer_socket_send_stats::m_rcv_wnd_exhausted</a>, <a class="el" href="info_8hpp_source.html#l00341">flow::net_flow::Peer_socket_send_stats::m_remote_rcv_wnd_exhaustion_events</a>, and <a class="el" href="info_8hpp_source.html#l00344">flow::net_flow::Peer_socket_send_stats::m_remote_rcv_wnd_recovery_events</a>.</p>

</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>net_flow/detail/stats/<a class="el" href="socket__stats_8hpp_source.html">socket_stats.hpp</a></li>
<li>net_flow/detail/stats/<a class="el" href="socket__stats_8cpp_source.html">socket_stats.cpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Mar 28 2025 22:55:36 for Flow by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
</small></address>
</body>
</html>
